// 重写数组函数

// 1、获取原来的数组方法
let oldArrayProtoMethods = Array.prototype

// 2、继承
export let ArrayMethods = Object.create(oldArrayProtoMethods)

// 3、劫持
let methods = [
  'push',
  'pop',
  'unshift',
  'shift',
  'splice'
]

// 4、运行
methods.forEach((item) => {
  ArrayMethods[item] = function(...args) {
    // list: [], 这里的 this 就是 []
    console.log('args', args);
    let result = oldArrayProtoMethods[item].apply(this, args)
    // 问题：数组追加对象的情况
    // arr.push({a: 1})
    let inserted
    switch (item) {
      case 'push':
      case 'unshift':
        inserted = args
        break
      case 'splice':
        inserted = args.splice(2)
        break
    }
    console.log('inserted', inserted);
    let ob = this.__ob__
    if(inserted) {
      ob.observeArray(inserted) // 对添加的对象进行劫持
    }
    return result
  }
})